#ifndef SUBMODULE_TYPES_H
#define SUBMODULE_TYPES_H

#include <string>
#include <vector>
#include <map>

namespace usm {

// 镜像提供商配置
struct MirrorProvider {
    std::string name;
    std::string base_url;
    int priority;           // 优先级权重 (0-100)
    bool can_create;        // 是否支持创建镜像
    bool requires_auth;     // 是否需要认证
    std::string api_endpoint;
};

// 子模块详细信息
struct SubmoduleInfo {
    std::string name;
    std::string path;
    std::string original_url;
    std::string current_url;
    std::string hash;
    std::string branch;
    std::vector<std::string> dependencies;
    int reference_count = 0;
    std::map<std::string, int> reference_projects; // 项目名 -> 引用次数
};

// 镜像评估结果
struct MirrorEvaluation {
    std::string url;
    std::string provider;
    int score;              // 综合评分 (0-100)
    int freshness;          // 新鲜度 (与上游同步程度)
    int popularity;         // 流行度 (被引用次数)
    bool exists;            // 镜像是否存在
    bool hash_matches;      // hash是否匹配
    std::string last_updated;
    
    // 重载小于运算符用于排序
    bool operator<(const MirrorEvaluation& other) const {
        return score > other.score; // 降序排列
    }
};

// 项目分析结果
struct ProjectAnalysis {
    std::string project_path;
    std::vector<SubmoduleInfo> submodules;
    std::map<std::string, std::vector<MirrorEvaluation>> mirror_evaluations;
    int total_submodules;
    int optimizable_submodules;
};

} // namespace usm
#endif
